#!/bin/bash

ENTITY_DIR="StudentVideo.Data/Entities"
DBSET_FILE="StudentVideo.Data/AppDbContext.DbSet.cs"
NAMESPACE="namespace StudentVideo.Data;"



context=$"using Microsoft.EntityFrameworkCore;\nusing StudentVideo.Data.Entities;\n\n"
context+=$"$NAMESPACE\n\n"
context+=$"public partial class AppDbContext {\n\n"

dbsets=""
for file in "$ENTITY_DIR"/*.cs; do
    # 检查是否有 [Table( 特性
    if grep -q "\[Table(" "$file"; then
        # 获取类名（处理继承情况）
        class=$(grep -E "public (partial )?class " "$file" | awk '{
            for(i=1;i<=NF;i++) {
                if($i=="class") {
                    # 找到class后的单词，并去除可能的继承符号和{
                    class_name = $(i+1)
                    sub(/:.*/, "", class_name)  # 去除继承部分
                    sub(/{.*/, "", class_name)  # 去除{
                    print class_name
                    exit
                }
            }
        }')

        # 跳过未找到类名的文件
        if [ -z "$class" ]; then
            continue
        fi

        # 提取类定义上方的 XML 注释（仅限类）
       xml_comment=$(awk '
            # 匹配到 "public class" 时停止
            /public (partial )?class / { exit }

            # 匹配所有 /// 注释行，并在行首添加空格
            /^[ \t]*\/\/\// {
                sub(/^[ \t]*/, "   ")  # 替换前导空白为空格
                print
            }
        ' "$file")

        # 创建去除Entity后缀的版本（可选）
        clean_class="${class%Entity}"  # 去除末尾的Entity

        # 生成更规范的DbSet属性名（处理复数形式）
        if [[ "$clean_class" =~ [sS]$ ]]; then
            # 如果已经是复数形式（以s结尾），直接使用
            prop="${clean_class}"
        else
            # 否则添加s
            prop="${clean_class}s"
        fi

        # 写入 XML 注释（如果存在）
        if [ -n "$xml_comment" ]; then
            dbsets+=$"$xml_comment\n"
        fi

        # 添加到dbsets（使用printf确保换行符正确）
        dbsets+=$(printf "   public DbSet<%s> %s { get; set; }" "$class" "$prop")
        dbsets+="\n\n"
    fi
done

context+=$dbsets

context+=$"}\n"

printf "$context" > $DBSET_FILE
printf "$context"
